Trac is being migrated to new services! Issues can be found in our new YouTrack instance and WIKI pages can be found on our website.

Changes between Initial Version and Version 1 of Openfire Client SSL Authentication How-to


Ignore:
Timestamp:
Nov 29, 2011, 3:06:28 AM (12 years ago)
Author:
ljfisher
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Openfire Client SSL Authentication How-to

    v1 v1  
     1Openfire is the only open source XMPP server (that I know of) that supports
     2client-side certificate authentication. This will explain how to setup
     3Openfire and Pidgin to using client-side certificate authentication.
     4
     5
     6= Create Certificates =
     7
     81. You will need to create a test certificate authority. A number of web sites have how-tos on creating a certificate authority for testing.
     9
     10 * Using a nice GUI interface:
     11     http://www.gria.org/documentation/5.3/how-tos/certificate-authority-signing-information
     12
     13 * Using the OpenSSL CA tools:
     14      http://www.debian-administration.org/articles/618
     15
     16   Create a certificate/key pair for each user.
     17
     18   ** The certificate's COMMON NAME must match the XMPP login name **
     19
     20
     212. Create a PKCS12 file containing the certificate/key pair. The files need to be in PEM (text) format for openssl and not DER (binary).
     22
     23 * To convert a certificate to PEM format:
     24      openssl x509 -inform der -in DER_CERT_FILE -outform pem PEM_CERT_FILE
     25
     26 * To convert a key to PEM format:
     27      openssl pkey -inform der -in DER_KEY_FILE -outform pem PEM_KEY_FILE
     28
     29 * To create the PKCS12 file:
     30      openssl pkcs12 -export -inkey KEYFILE -in CERTFILE -out USER.p12 -name USER
     31
     32
     33= Setting Up Openfire =
     34
     351. Download, install, and setup Openfire:
     36    http://www.igniterealtime.org/projects/openfire/index.jsp
     37    http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/install-guide.html
     38
     392. Openfire maintains several key stores in /etc/openfire/security. We are interested in client.truststore which contains the certificates trusted to authenticate users. We can place a certificate authority certificate in the key store and any certificates signed by the authority will be accepted for login to the server.
     40
     41   To add a certificate:
     42     keytool -importcert -keystore /etc/openfire/security/client.truststore -alias NAME -file CERTFILE
     43
     44   The default password is "changeit"
     45
     46   Be sure to say yes to "Trust this certificate?".
     47
     483. Login to you Openfire server on http://server:9090 and go to Server->Server Manager->System Properties. Ensure the following properties exist and are set:
     49
     50||= Property                                =||= Value =||
     51|| xmpp.client.cert.policy                   || "needed" or "wanted" ||
     52|| xmpp.client.certificate.accept-selfsigned || true ||
     53|| xmpp.client.certificate.verify            || true ||
     54|| xmpp.client.certificate.verify.chain      || true ||
     55|| xmpp.client.certificate.verify.root       || true ||
     56|| sasl.mechs                                || EXTERNAL (plus whatever else) ||
     57
     58   More properties can be found here:
     59    http://community.igniterealtime.org/thread/45670
     60    http://community.igniterealtime.org/thread/37967
     61
     624. Add a user with the same username as the common name of the certificate you created above in Users/Groups->Users->Create New User.
     63
     64= Build Pidgin with Client Certificate Authentication =
     65
     661. Pull the im.pidgin.cpw.ljfisher.ssl_client_auth branch from the pidgin monotone repository.
     67
     682. Ensure the following prerequisites are installed:
     69    * gnutls 2.10 +  Older versions will work but exporting certificates and keys will fail
     70    * Cyrus SASL
     71
     723. Configure Pidgin with these options:
     73     ./configure --enable-cyrus-sasl --enable-gnutls=yes
     74
     754. Build and install Pidgin:
     76     make install
     77
     78= Configure Pidgin =
     79
     801. Open Tools -> Certificates -> Your Certificatesw. Select Add. Select the PKCS12 file, USER.p12, created above. Enter a passwords and name.
     81
     822. Create a XMPP (Jabber) account.
     83
     84   On the Basic tab:
     85      a. Enter a username same as the commone name in the certificate
     86
     87   On the Advanced tab:
     88      a. Select Connection Security: Use old-sylte SSL
     89      b. Select Login certificate: the cert you added above
     90      c. Change connection port to 5223.
     91
     92   Openfire doesn't seem to play well with client authentication using starttls so we use regular SSL which uses port 5223.
     93
     943. Enable the account and it should login.
     95
     96
     97= Troubleshooting =
     98
     99== You get SSL Handshake failed messages ==
     100
     101a. Check that /etc/openfire/security/client.truststore is readable by openfire user.
     102b. Check that the certificate authority's certificate has been added to  /etc/openfire/security/client.truststore and has been trusted:
     103      keytool -list -keystore /etc/openfire/security/client.truststore
     104c. Check that the user name matches the common name of the login certificate.
     105
     106== You get a password dialog when trying to login even though you selected a login certificate ==
     107
     108a. Check that EXTERNAL has been added to the sasl.mechs Openfire server property.
     109b. Check that the user name matches the common name of the login certificate.
     110c. Check that there is an account for the user on the Openfire server
     111
     112
     113== Bug Reports ==
     114
     115If you cannot resolve the issue send a capture of the Pidgin debug output by running Pidgin with debug and GNUTLS debug enabled:
     116   PURPLE_GNUTLS_DEBUG=9 pidgin -d > pidgin.dbg
     117
     118And capture the login using Wireshark and send a pcap.
All information, including names and email addresses, entered onto this website or sent to mailing lists affiliated with this website will be public. Do not post confidential information, especially passwords!